前兩天簡單介紹 API Gateway 和 Lambda
今天則是要使用 API Gateway 和 Lambda 實作簡單的 Restful 應用
串接的關係會先建立 Lambda 再建立 API Gateway
不過先後可不照著做
該做的事情該有的受全都還是要有
雖然在建立 Lambda Function 的時候
也可以建立 IAM Role 並有相關聯的 IAM Policy
不過這樣建立的 IAM Role 重複性很高
顯得有些雜亂無章
長久下來會不好管理
因此還是建議自己建立 IAM Role 並 Attach 相關的 Policy 比較適合
最基礎的 Lambda Function 只需要兩個 Policy
AWSLambdaBasicExecution
和 AWSLambdaVPCAccess
即可
AWSLambdaBasicExecution
主要只有推送 Log 和建立 Log
而 AWSLambdaVPCAccess
是當 Lambda Function 有 Configure VPC 的時候需要用到
實際上 Configure VPC 的行為
是在現有的 VPC 上裝一張網卡
因此才會有和 Network Interface 相關的 Policy
{
"Statement": [
{
"Action": "logs:CreateLogGroup",
"Effect": "Allow",
"Resource": "arn:aws:logs:ap-northeast-1:{AWS Account}:*"
},
{
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "arn:aws:logs:ap-northeast-1:{AWS Account}:log-group:/aws/lambda/*:*"
}
],
"Version": "2012-10-17"
}
{
"Statement": [
{
"Action": [
"ec2:CreateNetworkInterface",
"ec2:DeleteNetworkInterface",
"ec2:DescribeNetworkInterfaces"
],
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
}
建立 IAM 角色的時候
信任實體的案例選擇 AWS Lambda
如果使用 IaC 的也可以參考下列的 json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
將剛剛建立的許可關聯至 IAM Role 中
再最後一步確認沒問題後
就可以填 IAM Role 的名稱並建立
建立函式的時候
選擇剛剛建立的 IAM Role 即可
比較泛用的 API 還是 REST API
而 REST API 私有的部分
是只能在 VPC 中執行
可以理解成在 EC2 或是 AWS 上的內部環境才能呼叫到
建立的時候
無特別喜好狀況下則建議選擇區域性
了解區域性、邊緣最佳化的差別再考慮按照需求做選擇
而如果選擇私有則無法客製化網域
這個則需要特別注意
首先要先在 API 底下建立一筆資源
建立資源後才能建立方法
按儲存後會出現修改 AWS Lambda 權限的提示
這個還重要的
AWS Lambda 執行階段的權限則是靠 IAM Role
但是並沒有被調用權限
而這個步驟就是為 AWS Lambda 添加由 API Gateway 調用 AWS Lambda 的權限
在資源的頁面中
點按 操作
後,選擇 佈署 API
即可進行佈署
佈署的時候需要選擇階段
階段的意思也就是不同環境的意思
第一次建立的時候需要建立新的
之後如果資源或是方法有變更
則需要覆蓋原有佈署
目前僅為範例
因此建立用量計劃的時候先不設定限制
剛剛佈署到階段後
就可以將用量計劃綁訂到階段
而用量計劃再綁定金鑰
如果要自訂網址
需要到側欄選擇自訂網域名稱
不可直接指定 API Gateway 的網址
而是需要另外在這個位置建立網址
§ 注意 §
技術上 API Gateway 和 Lambda 可串起來,也可以做到認證和授權,但是實務上,不代表適合將現有的 API Server 拆解成此架構,只有在整個業務相對獨立的狀況下(如:非同步的 SNS 通知),比較適合將程式邏輯切開來,應用在 Lambda 或是 API Gateway + Lambda 上
參考資料